package com.airsky.user.service;

import com.airsky.user.entity.AirSky_User;
import com.airsky.user.entity.PageResult;
import com.airsky.user.mapper.UserMapper;
import com.airsky.user.utils.Md5Util;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mysql.cj.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;
import java.util.regex.Pattern;

/**
 * @author LT
 * @version 1.0.0
 * @ClassName UserService.java
 * @Description TODO 用户业务层
 * @createTime 2020年06月28日 15:07:00
 */
@Slf4j
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 分页查询
     *
     * @param loginName
     * @param pageNum
     * @param pageSize
     * @return
     */
    public PageInfo<AirSky_User> queryUserByPage(String loginName, int pageNum, int pageSize) {
        // PageHelper插件封装开始分页的页数
        PageHelper.startPage(pageNum, pageSize);
        // 封装AirSky_User到通用Example（查询语句）
        Example example = new Example(AirSky_User.class);
        // 判断用户名为不为空
        if (!StringUtils.isNullOrEmpty(loginName)) {
            // 查询条件
            example.createCriteria().orLike("loginName", "%" + loginName + "%");
        }
        // 封装查询语句到集合中
        List<AirSky_User> users = userMapper.selectByExample(example);
        // 判空
        if (CollectionUtils.isEmpty(users)) {
            return null;
        }
        return new PageInfo<>(users);
    }

    /**
     * 根据用户id删除用户
     *
     * @param userId
     * @return
     */
    public String deleteByUserId(Integer userId) {
        // 根据主键查询id
        AirSky_User user = userMapper.selectByPrimaryKey(userId);
        // 判断是否为0
        if ("0".equals(user.getUserStatus())) {
            return "该用户处于禁用状态无法删除";
        }

        // 使用三元运算判断
        return userMapper.deleteByPrimaryKey(userId) == 1 ? "删除成功" : "删除失败";
    }

    /**
     * 保存用户
     *
     * @param user
     * @return
     */
    public String save(AirSky_User user) {
        // 封装通用Example查询
        Example example = new Example(AirSky_User.class);
        // 封装Example的创建标准查询
        Example.Criteria criteria = example.createCriteria();
        // 封装用户名and语句
        criteria.andEqualTo("loginName", user.getLoginName());
        // 根据Example条件进行查询总数
        int i = userMapper.selectCountByExample(example);
        // 判断是否为1
        if (i == 1) {
            return "登录名已存在";
        }

        // 封装邮编
        String regex = "^[1-9]\\d{5}$";
        if (!Pattern.matches(regex, user.getPostCode())) {
            return "邮编不正确";
        }

        // 封装MD5
        String md5Pwd = Md5Util.getMD5(user.getLoginPassword());
        // 设置登录密码为md5
        user.setLoginPassword(md5Pwd);
        // 插入用户
        int count = userMapper.insert(user);
        if (count != 1) {
            return "添加用户失败";
        }
        return "用户添加成功";
    }

    /**
     * 更新用户
     *
     * @param user
     * @return
     */
    public String update(AirSky_User user) {
        // 通过主键选择更新AirSky_User表
        int count = userMapper.updateByPrimaryKeySelective(user);
        if (count == 1) {
            return "更新成功";
        }
        return "更新失败";
    }

}
